对齐训练:SFT、RLHF 与 DPO
14-预训练:数据、稳定性与评估 产出的是 Base Model —— 它把语言规律和世界知识压进了参数里,但它不会「听从指令」。
给 LLaMA-65B 的 Base Model 输入「请解释什么是量子计算」,它可能这么续写:
请解释什么是量子计算?这是一个很好的问题。在许多大学的物理课程中,量子计算都是一个热门话题。以下是一些关于量子计算的常见问题:1. 什么是量子比特?2. 量子纠缠是什么意思?……
它没有回答,而是生成了更多问题。因为在语料里,「问题后面跟更多问题」和「问题后面跟答案」都是常见模式,Base Model 没有理由偏好后者。
这一篇讲把它变成对话助手的两阶段:SFT(学格式)与 偏好优化(学取舍)。PPO 到 GRPO 的算法演进与 Agentic RL 的奖励函数设计在 17-Agentic RL。
要对齐什么
| 维度 | 含义 |
|---|---|
| 有用性(Helpfulness) | 尽力回答问题、遵循指令要求的格式 |
| 无害性(Harmlessness) | 拒绝生成有害内容、不编造 |
| 诚实性(Honesty) | 不确定时表达不确定(对应 07-模型幻觉) |
三个维度会冲突,且冲突时的优先级是有约定的:用户要求「告诉我如何入侵网站」,此时无害性压过有用性。对齐研究的核心工作正是在这些冲突点上定规则 —— 而这个规则由标注规范决定,是人定的,不是从数据里学出来的。
SFT:教它「说话的方式」
损失只算在回答上
SFT 的训练目标和预训练一样是交叉熵,唯一的区别是 mask:
[System] 你是一个有帮助的AI助手。
[User] 请用三句话解释什么是黑洞。
[Assistant] 黑洞是时空中引力极强的区域……模型看到完整的对话,但损失只在 [Assistant] 之后计算。指令部分是条件,不是要被预测的目标。不 mask 的话模型会学着去生成用户的问题,而不是回答。
SFT 与预训练的目标一样是交叉熵,差别只在 mask:
输入序列(模型看到完整对话):
[System] 你是一个有帮助的 AI 助手。
[User] 请用三句话解释什么是黑洞。
[Assistant] 黑洞是时空中引力极强的区域……
┌──────────────────────────────┬────────────────────────────────┐
│ 条件部分(不参与损失) │ 目标部分(算交叉熵) │
│ [System] … [User] … │ [Assistant] 之后的每一个 token │
└──────────────────────────────┴────────────────────────────────┘
loss_mask = 0 loss_mask = 1
⇒ 指令是条件,不是要被预测的目标
⇒ 不做 mask,模型会学着去生成用户的问题,而不是回答Chat Template:角色边界靠特殊 token
| 格式 | 长什么样 |
|---|---|
| ChatML(OpenAI / Qwen) | <|im_start|>role\n内容<|im_end|> |
| LLaMA 2 | [INST] <<SYS>>\n系统提示\n<</SYS>>\n\n用户消息 [/INST] 回答 |
模板不只是工程细节 —— 它决定模型「什么时候该说话、什么时候该停」。同一份数据换成不匹配的模板,多轮对话能力会明显退化。这也是推理侧必须用模型自带模板的原因(06-vLLM 部署、参数与服务特性)。
数据从哪来
| 数据集 | 规模 | 生成方式 |
|---|---|---|
| Alpaca | 52K | GPT-3.5 生成 |
| ShareGPT | ~90K 对话 | 用户分享的真实 ChatGPT 对话 |
| OpenAssistant (OASST) | ~160K 消息 | 社区众包,多语言,带偏好标注 |
| WizardLM Evol-Instruct | 250K | GPT-4「进化」生成(加约束、加深推理步) |
| UltraChat | 1.5M 对话 | GPT-3.5/4 生成 |
方法上有三类:人工标注(质量最高)、Self-Instruct / Evol-Instruct(用强模型批量造)、开源数据集(直接取用)。Self-Instruct 从少量种子指令出发让模型生成新指令;Evol-Instruct 则对已有指令做「进化」,提高复杂度与多样性。
训练参数与预训练差一个数量级
| 维度 | 预训练 | SFT |
|---|---|---|
| 数据量 | 万亿 token | 数万到数百万条 |
| 学习率 | ~ | ~ |
| Epoch | 1–2 | 2–5 |
| 时间 | 数周到数月 | 数小时到数天 |
学习率低一个数量级是关键约束:SFT 不希望大幅改变已学到的知识,只想调整输出行为。学得太狠会灾难性遗忘 —— 指令遵循能力上来了,预训练知识掉了。
LIMA 与「表面对齐假说」
LIMA(Meta, 2023)用一个反直觉的结果说明了 SFT 的性质:仅 1,000 条精心挑选的 SFT 数据,就能让模型的对话质量在多个评估维度上接近当时的强模型。
对应的解释是 Superficial Alignment Hypothesis(表面对齐假说):模型的知识与能力几乎全部来自预训练,对齐训练教的是「以什么格式和风格输出已有的知识」。这也解释了为什么 InstructGPT 用 13K 条数据就产生了显著的行为变化,以及为什么 SFT 数据的多样性比数量更关键。
SFT 的根本局限
SFT 是最大似然训练 —— 模型被训练去模仿参考回答。这带来三个结构性短板:
- 学到了「回答」的形式,但对「好回答」和「平庸回答」的细微差别不敏感
- 只学会了模仿,没学会评判 —— 面对多个可能回答时无法挑最好的
- 开放式任务里,参考回答只是众多好答案之一,最大似然会压缩多样性
短板 2 是偏好优化存在的理由。
RLHF:用偏好而非标准答案
核心前提是一句不对称性:人类很难写出最优回答,但很容易判断哪个回答更好。
流程分两阶段。
阶段一:训练奖励模型
数据:对同一条指令,让 SFT 模型生成 4–9 个回答,人类标注员排序或两两比较。
结构:以 SFT 模型初始化,去掉最后的语言模型头,换成一个标量输出头 —— 输入(指令, 回答),输出分数
损失(Bradley-Terry 模型):
其中
数据规模:InstructGPT 约 33K 比较对,LLaMA 2 约 1M 比较对。
奖励模型是整条链路的瓶颈
奖励模型的偏差会原封不动地传给策略模型。标注员倾向认为长回答更「充实」,奖励模型就学会偏好长度,于是策略模型变得啰嗦 —— 这就是 Reward Hacking:模型找到了讨好奖励模型的捷径,而不是真正提升质量。
这类偏差靠「多加数据」解决不了,得改标注规范或改奖励设计(17-Agentic RL 里有奖励函数的三种形态)。
阶段二:PPO 优化策略
:正在训练的策略(语言模型本身) :SFT 模型,冻结不动 :奖励模型打的分 :KL 惩罚系数
KL 项是必需的,不是正则化的锦上添花。 没有它,策略会迅速塌缩到能拿最高分的极端输出模式 —— 奖励模型只在 SFT 分布的邻域内被训练过,跑到分布外它的打分完全不可靠。
每一步要跑四遍前向:当前策略生成回答 → 奖励模型打分 → 与参考模型算 KL → PPO 更新。这意味着一轮训练里要同时把四个模型放进显存:策略、参考、奖励模型、价值网络(PPO 的 Critic)。
这是 RLHF 工程复杂度的主要来源,也是 DPO 想解决的问题。
RLHF 的两阶段,以及阶段二为什么同时要四个模型:
阶段一:训练奖励模型
SFT 模型 ──▶ 对同一指令生成 4–9 个回答
│
人类标注排序 / 两两比较
│
以 SFT 初始化,去掉语言模型头,换一个标量输出头
│
输入(指令, 回答)──▶ 分数 r(x, y)
│
Bradley-Terry 损失:让好回答的分数高于差回答
⇒ 分数的绝对数值没有意义,只有相对序有意义
阶段二:PPO 优化策略(四个模型同时驻留显存)
┌────────────────┐ ┌────────────────┐
│ 策略 π_θ │ │ 参考 π_ref │ 每一步四遍前向:
│(正在训练) │ │(SFT,冻结) │ 生成 → 打分 → 算 KL → 更新
└────────────────┘ └────────────────┘
┌────────────────┐ ┌────────────────┐
│ 奖励模型 r │ │ Critic(价值) │ 显存 ≈ 2×(策略+Critic) + 参考 + 奖励
└────────────────┘ └────────────────┘
⇒ 这是 RLHF 工程复杂度的主要来源,也是 DPO 想解决的问题效果
InstructGPT 最常被引用的一组数字:经过 RLHF 的 1.3B 模型,在人类评估中胜过未对齐的 175B GPT-3 —— 参数量差 100 倍以上。
提升集中在四处:复杂指令与多步任务的遵循、有害请求的拒绝、回答的连贯与条理、以及不确定时的表达(07-模型幻觉)。
DPO:把 RL 问题变成分类问题
推导链条
RLHF 的最优策略有闭式解(Rafailov et al., 2023):
反解出奖励(这才是关键一步)—— 把上式取对数重排:
把右边代入 Bradley-Terry 的偏好概率。注意偏好概率只依赖
读法很直观:抬高好回答相对参考模型的概率比,压低差回答的概率比。「相对
从 RLHF 的目标函数到 DPO 的损失,四步走完:
① RLHF 的目标:max E[ r(x,y) − β·KL(π_θ ‖ π_ref) ]
│
│ 这个目标有闭式解
▼
② π*(y|x) = (1 / Z(x)) · π_ref(y|x) · exp( r(x,y) / β )
│
│ 取对数重排 ⇒ 反解出奖励(这才是关键一步)
▼
③ r(x,y) = β·log[ π*(y|x) / π_ref(y|x) ] + β·log Z(x)
│
│ 右边代入 Bradley-Terry 的偏好概率
▼
④ 偏好概率只依赖 r(x,y_w) − r(x,y_l) 这个差值
⇒ β·log Z(x) 与 y 无关,相减时消掉
⇒ Z(x) 不可解,也不妨碍推导
最终损失:
−E[ log σ( β·log[π_θ(y_w)/π_ref(y_w)] − β·log[π_θ(y_l)/π_ref(y_l)] ) ]
读法:抬高好回答相对参考模型的概率比,压低差回答的概率比。
「相对 π_ref」这个参照同时充当了 RLHF 里 KL 项的等效角色 ——
把「别跑太远」的约束内建进了损失。与 RLHF 的对比
| 维度 | RLHF (PPO) | DPO |
|---|---|---|
| 需要同时驻留的模型 | 4 个(策略 / 参考 / 奖励 / 价值) | 2 个(策略 / 参考) |
| 算法 | 强化学习 | 分类损失(监督学习) |
| 稳定性 | 对超参敏感,易不稳 | 接近 SFT |
| 采样 | 需要在线采样(每步都要生成) | 离线数据即可 |
| 显存 | ~4× SFT | ~2× SFT |
它不是近似,是同一条目标函数的重新参数化 —— 在偏好数据覆盖的分布内,两者优化的是同一个东西。
局限
DPO 假设偏好数据是离线的:回答来自
变体各自针对一处:
| 变体 | 改了什么 |
|---|---|
| IPO | 换偏好模型,抑制 DPO 在偏好数据上的过拟合 |
| KTO | 不需要成对比较,只要「好 / 差」的二元标注 |
| ORPO | 把 SFT 与偏好优化合并成一个阶段 |
| SimPO | 去掉参考模型,用长度归一化的对数概率做隐式奖励 |
偏好数据工程
三种标注形态
| 方式 | 做法 | 权衡 |
|---|---|---|
| 两两比较 | 展示两个回答,选更好的 | 最常用;一致性最高 —— 绝对打分标准因人而异,「哪个更好」的判断更趋一致 |
| 排序 | 对 4–9 个回答完整排序 | 信息量大(一次排序产生多个比较对),难度高 |
| 属性标注 | 同时标在哪个维度上更好(有用 / 安全 / 真实 / 格式) | 训练更精细,成本最高 |
规模:SFT 求质、偏好求量
| 模型 | SFT 数据 | 偏好数据 | 方法 |
|---|---|---|---|
| InstructGPT | ~13K | ~33K 比较对 | RLHF (PPO) |
| LLaMA 2 Chat | ~27K | ~1M 比较对 | Rejection Sampling + PPO |
| Zephyr-7B | ~200K(UltraChat) | ~60K(UltraFeedback) | DPO |
| Mistral Instruct | 未公开 | 未公开 | DPO |
一个可操作的经验:SFT 追求质量(LIMA 的 1,000 条即可见效),偏好数据必须追规模与多样性 —— 因为要覆盖的是「各种场景下的取舍」,场景枚举不足就会出现没见过的情形没有偏好可依。
Rejection Sampling:用模型自己的输出当教材
LLaMA 2 在 RLHF 里用的一招:对每个 prompt 用当前策略生成
比直接 PPO 简单稳定,且能吃到更多 prompt。LLaMA 2 的对齐是多轮迭代的:
SFT → Rejection Sampling → RLHF → 用新模型再做 Rejection Sampling → 再 RLHF → …每一轮都用更好的模型生成更好的数据 —— 这条自举回路是「对齐不是一次性的」的具体表现。
减少人类标注:CAI 与 RLAIF
Constitutional AI
Anthropic 的思路是用一套明文规则(「宪法」)替代部分人工标注:
- Red Teaming —— 用攻击者模型生成有害 prompt
- 让模型给出初始回答(可能含有害内容)
- 自我批评 —— 按宪法原则评判自己的回答哪里有问题
- 自我修正 —— 重写回答使其符合原则
- 训练 —— (原始 prompt, 修正后回答) 作 SFT 数据;(原始回答, 修正后回答) 作偏好对做 DPO/RLHF
偏好信号的来源从「人类判断」换成了「规则判断」 —— 规则可审计、可修改,代价是规则的完备性要人负责。
RLAIF
用强模型(如 GPT-4)直接充当标注员生成偏好数据。代价是引入标注模型的偏见,好处是成本比人工低一到两个数量级,且能快速扩规模。
相关
- 17-Agentic RL —— PPO → GRPO 的算法演进、奖励函数三种形态、Agentic RL 的 MDP
- 16-参数高效微调:LoRA、QLoRA 与 Adapter —— 对齐训练本身的显存优化
- 05-优化器与显存开销 —— 四个模型同时驻留的显存账
- 14-预训练:数据、稳定性与评估 —— 上一环:Base Model 怎么来的
- 07-模型幻觉 —— 诚实性维度要处理的问题
- 04-采样参数 —— 训练侧的偏好如何体现在推理侧的采样行为
- 08-量化 —— QLoRA 与推理量化的交叉点
参考
- https://arxiv.org/abs/2203.02155
- https://arxiv.org/abs/2305.18290
- https://arxiv.org/abs/1707.06347
- https://arxiv.org/abs/2307.09288
- https://arxiv.org/abs/2305.11206
- https://arxiv.org/abs/2212.08073
- https://arxiv.org/abs/2212.10560 | WizardLM / Evol-Instruct:https://arxiv.org/abs/2304.12244
- https://arxiv.org/abs/2310.16944
- ting.is-a.dev. LLM 原理 专栏第 04 篇.
部分公式在原站转换中退化为可见文本,已按 InstructGPT 与 DPO 原论文口径重建
YJ